USE business;
GO

-- jeli w bazie istnieje perspektywa ... 
IF OBJECT_ID('dbo.v_Pracownicy') IS NOT NULL
	DROP VIEW dbo.v_Pracownicy; -- ... to j usuwamy
GO

-- tworzymy perspektyw pobierajc dane z tabel Pracownicy i Dzialy
-- zamiast identyfikatora dziau w perspektywie znajduje si nazwa dziau
CREATE VIEW dbo.v_Pracownicy
AS
SELECT p.ID, p.Imie, p.Nazwisko, p.Pensja, d.Nazwa
FROM dbo.Pracownicy p, dbo.Dzialy d
WHERE p.id_dzialu = d.Id;
GO

-- jeli w bazie istnieje wyzwalacz ...
IF OBJECT_ID('dbo.trg_Insert_v_Pracownicy') IS NOT NULL
	DROP TRIGGER dbo.trg_Insert_v_Pracownicy; -- ... to go usuwamy
GO

-- tworzymy nowy wyzwalacz ...
CREATE TRIGGER dbo.trg_Insert_v_Pracownicy
ON dbo.v_Pracownicy -- ... na perspektywie ...
INSTEAD OF INSERT   -- ... zastpujcy instrukcj INSERT
AS

-- deklaracja zmiennych
	DECLARE 
		@imie      VARCHAR(20),
		@nazwisko  VARCHAR(30),
		@pensja    MONEY,
		@dzial     VARCHAR(30),
		@id_dzialu INT;

-- z tabeli inserted pobierane s dane, ktre uytkownik prbuje doda do 
-- perspektywy v_Pracownicy
	SELECT 
		@imie      = imie,
		@nazwisko  = nazwisko,
		@pensja    = pensja,
		@dzial     = nazwa
	FROM Inserted;

-- pobierany jest identyfikator dziau na podstawie podanej przez uytkownika
-- w instrukcji INSERT nazwy dziau
	SELECT 
		@id_dzialu = ID
	FROM dbo.Dzialy
	WHERE UPPER(Nazwa) = UPPER(@dzial);

-- jeli identyfikator dziau nie zosta znaleziony w tabeli Dzialy ...
	IF @id_dzialu IS NULL
	BEGIN
		-- ... to nastpuje dodanie nowego dziau do tabeli Dzialy ...
		INSERT INTO dbo.Dzialy
		VALUES (UPPER(@dzial))
		
		-- ... I pobranie identyfikatora dziau
		SELECT 
			@id_dzialu = ID
		FROM dbo.Dzialy
		WHERE UPPER(Nazwa) = UPPER(@dzial);
	END;
	
	-- na koniec dane wpisywane s do tabeli Pracownicy
INSERT INTO dbo.Pracownicy
VALUES (@imie, @nazwisko, @pensja, @id_dzialu);


INSERT INTO dbo.v_Pracownicy
VALUES (1, 'Marta', 'Matacka', 3400, 'Informatyka');
